﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using PUCP.SI2.SGIRP.BE;
using System.Data;


namespace PUCP.SI2.SGIRP.DA.DAOLocales
{
    public class   DAOLocales
    {
        

        public List<TipoLocalBE> queryTipoLocal()
        {
            MySqlConnection conn = new coneccion().getInstance();

            List<TipoLocalBE> l = new List<TipoLocalBE>();

            conn.Open();

            String query2 = "SELECT * FROM tipo_local";

            MySqlCommand cmd2 = new MySqlCommand(query2, conn);

            MySqlDataReader rd2 = cmd2.ExecuteReader();
            

            while (rd2.Read())
            {
                TipoLocalBE t = new TipoLocalBE();

                int codigo = rd2.GetInt32("CODIGO");
                String descripcion = rd2.GetString("DESCRIPCION");

                t.Codigo = codigo;
                t.Descripcion = descripcion;
                l.Add(t);
            }

            rd2.Close();
            conn.Close();

            return l;
         
        }

        public List<CentroComercialBE> queryCentrosComerciales(){

            List<CentroComercialBE> lista = new List<CentroComercialBE>();

            MySqlConnection conn = new coneccion().getInstance();

  

            conn.Open();

            String query = "SELECT * FROM centro_comercial ";

            MySqlCommand cmd = new MySqlCommand(query, conn);

            MySqlDataReader rd2 = cmd.ExecuteReader();

            while (rd2.Read()) {

               int codigo = rd2.GetInt32("codigo");
               String nombre = rd2.GetString("nombre");
               String abreviatura = rd2.GetString("abreviatura");

               CentroComercialBE cc = new CentroComercialBE();

               cc.Codigo = codigo;
               cc.Nombre = nombre;
               cc.Abreviatura = abreviatura;

               lista.Add(cc);
            
            }

            rd2.Close();
            conn.Close();

            return lista;
    
        }


        public List<LocalBE>  QueryAll() { 
            MySqlConnection conn = new coneccion().getInstance();

            List<LocalBE> l = new List<LocalBE>();

            conn.Open();

          
            



            String query = "SELECT * FROM local ";
            MySqlCommand cmd = new MySqlCommand(query, conn);

            MySqlDataReader rd = cmd.ExecuteReader();

            while (rd.Read()) {

                int codigo = rd.GetInt32("CODIGO");
                String codigoLocal = rd.GetString("CODIGOLOCAL");
                float areaLocal = rd.GetFloat("AREALOCAL");
                float areaTerraza = rd.GetFloat("AREATERRAZA");
                float areaVitrina = rd.GetFloat("AREAVITRINA");
                float areatotal = rd.GetFloat("AREATOTAL");
                int codigoCC = rd.GetInt32("CodigoCC");//
                int nivel = rd.GetInt32("nivel") ;
                String plano = (rd.GetString("plano")==null)?"":rd.GetString("plano");
                String foto = (rd.GetString("foto")==null)?"":rd.GetString("foto");
                int codTipo = rd.GetInt32("codTipo"); //
                String estadoLocal = rd.GetString("ESTADOLOCAL");
                int estado = rd.GetInt32("estado");


                LocalBE e = new LocalBE();
                e.Codigo = codigo;
                e.CodigoLocal = codigoLocal;
                e.AreaLocal = areaLocal;
                e.AreaTerraza = areaTerraza;
                e.AreaVitrina = areaVitrina;
                e.AreaTotal = areatotal;
                e.Nivel = nivel;
                e.Plano = plano;
                e.Foto = foto;
                e.EstadoLocal = estadoLocal;
                e.Estado = estado;
                e.CodigoCC = codigoCC;

                String query2 = "SELECT * FROM tipo_local WHERE codigo = @id";
                MySqlConnection conn2 = new coneccion().getInstance();
                conn2.Open();
                MySqlCommand cmd2 = new MySqlCommand(query2, conn2);
                cmd2.Parameters.AddWithValue("@id", codTipo);

                MySqlDataReader rd2 = cmd2.ExecuteReader();
               

               if (rd2.Read())
                {
                    TipoLocalBE t = new TipoLocalBE();

                    int codigol = rd2.GetInt32("CODIGO");
                    String descripcionl = rd2.GetString("DESCRIPCION");

                    t.Codigo = codigol;
                    t.Descripcion = descripcionl;
                    e.Tipo = t;
                    

                   
                   
                    

               }

               rd2.Close();
               conn2.Close();

               l.Add(e);
            
            }

            rd.Close();
            conn.Close();
        
            return l;
        }

        public void UpdateLocal(LocalBE l) {


            String sql = "UPDATE  local SET codigolocal = @CODLOC , codigoCC = @CODCC," +
                        "areaLocal = @AL , areaTerraza = @ATE , areaVitrina = @AV , areaTotal = @AT ," +
                         "nivel = @nivel , estadolocal = @EL , estado = @estado , foto = @foto , plano =@plano " +
                         "WHERE codigo = @codigo ";

            MySqlConnection conn = new coneccion().getInstance();
            conn.Open();


            MySqlCommand cmd =  new MySqlCommand(sql ,conn);

            cmd.Parameters.AddWithValue("@CODLOC", l.CodigoLocal);
            cmd.Parameters.AddWithValue("@CODCC", l.CodigoCC);
            cmd.Parameters.AddWithValue("@AL", l.AreaLocal);
            cmd.Parameters.AddWithValue("@ATE", l.AreaTerraza);
            cmd.Parameters.AddWithValue("@AV", l.AreaVitrina);
            cmd.Parameters.AddWithValue("@AT", l.AreaTotal);
            cmd.Parameters.AddWithValue("@nivel", l.Nivel);
            cmd.Parameters.AddWithValue("@EL", l.EstadoLocal);
            cmd.Parameters.AddWithValue("@estado", l.Estado);
            cmd.Parameters.AddWithValue("@foto", l.Foto);

            cmd.Parameters.AddWithValue("@plano", l.Plano);
            cmd.Parameters.AddWithValue("@codigo", l.Codigo);


            cmd.ExecuteNonQuery();

            
            conn.Close();

            
           
        
        
        }

        public void DesactivarLocal(int id) {


            String sql = "UPDATE  local SET estado = @estado , estadoLocal = @estadolocal WHERE codigo = @codigo ";

            MySqlConnection conn = new coneccion().getInstance();
            conn.Open();

            MySqlCommand cmd = new MySqlCommand(sql, conn);

            cmd.Parameters.AddWithValue("@estado",0);
            cmd.Parameters.AddWithValue("@estadolocal","INACTIVO");
            cmd.Parameters.AddWithValue("@codigo", id);
            cmd.ExecuteNonQuery();

            conn.Close();

        
        
        
        }

        public void AddLocal(LocalBE l) {


            String sql = "INSERT INTO  local (codigolocal,codigocc,arealocal,areaterraza,areavitrina,areatotal,nivel,estadolocal,estado,foto,plano,codtipo) values ( @CODLOC ,  @CODCC," +
                       " @AL , @ATE ,  @AV ,  @AT ," +
                        " @nivel ,  @EL , @estado ,  @foto ,@plano , @codtipo )" 
                        ;

            MySqlConnection conn = new coneccion().getInstance();
            conn.Open();


            MySqlCommand cmd = new MySqlCommand(sql, conn);

            cmd.Parameters.AddWithValue("@CODLOC", l.CodigoLocal);
            cmd.Parameters.AddWithValue("@CODCC", l.CodigoCC);
            cmd.Parameters.AddWithValue("@AL", l.AreaLocal);
            cmd.Parameters.AddWithValue("@ATE", l.AreaTerraza);
            cmd.Parameters.AddWithValue("@AV", l.AreaVitrina);
            cmd.Parameters.AddWithValue("@AT", l.AreaTotal);
            cmd.Parameters.AddWithValue("@nivel", ""+l.Nivel);
            cmd.Parameters.AddWithValue("@EL", l.EstadoLocal);
            cmd.Parameters.AddWithValue("@estado", l.Estado);
            cmd.Parameters.AddWithValue("@foto", "" /*l.foto*/);
            cmd.Parameters.AddWithValue("@plano", ""/*l.Plano*/);
            cmd.Parameters.AddWithValue("@codtipo", l.Tipo.Codigo);

            cmd.ExecuteNonQuery();


            conn.Close();

        
        
        }





        public List<LocalBE> filtro(String cod, int cod_cc, int cod_tipo, int esta)
        {
            String sql = "SELECT * FROM local where 1=1  ";

            sql += (cod=="todos")?"":" and codigolocal like '"+cod+"' ";
            sql += (cod_cc==-1)? "":" and codigoCC ="+cod_cc +" ";
            sql += (cod_tipo==-1)? "":" and codtipo ="+cod_tipo +" ";
            sql += (esta==-1)? "":" and estado ="+esta+" ";


          

            MySqlConnection conn = new coneccion().getInstance();

            List<LocalBE> l = new List<LocalBE>();

            conn.Open();

            MySqlCommand cmd = new MySqlCommand(sql, conn);

            MySqlDataReader rd = cmd.ExecuteReader();

            while (rd.Read())
            {

                int codigo = rd.GetInt32("CODIGO");
                String codigoLocal = rd.GetString("CODIGOLOCAL");
                float areaLocal = rd.GetFloat("AREALOCAL");
                float areaTerraza = rd.GetFloat("AREATERRAZA");
                float areaVitrina = rd.GetFloat("AREAVITRINA");
                float areatotal = rd.GetFloat("AREATOTAL");
                int codigoCC = rd.GetInt32("CodigoCC");//
                int nivel = rd.GetInt32("nivel");
                String plano = (rd.GetString("plano") == null) ? "" : rd.GetString("plano");
                String foto = (rd.GetString("foto") == null) ? "" : rd.GetString("foto");
                int codTipo = rd.GetInt32("codTipo"); //
                String estadoLocal = rd.GetString("ESTADOLOCAL");
                int estado = rd.GetInt32("estado");


                LocalBE e = new LocalBE();
                e.Codigo = codigo;
                e.CodigoLocal = codigoLocal;
                e.AreaLocal = areaLocal;
                e.AreaTerraza = areaTerraza;
                e.AreaVitrina = areaVitrina;
                e.AreaTotal = areatotal;
                e.Nivel = nivel;
                e.Plano = plano;
                e.Foto = foto;
                e.EstadoLocal = estadoLocal;
                e.Estado = estado;
                e.CodigoCC = codigoCC;

                String query2 = "SELECT * FROM tipo_local WHERE codigo = @id";
                MySqlConnection conn2 = new coneccion().getInstance();
                conn2.Open();
                MySqlCommand cmd2 = new MySqlCommand(query2, conn2);
                cmd2.Parameters.AddWithValue("@id", codTipo);

                MySqlDataReader rd2 = cmd2.ExecuteReader();


                if (rd2.Read())
                {
                    TipoLocalBE t = new TipoLocalBE();

                    int codigol = rd2.GetInt32("CODIGO");
                    String descripcionl = rd2.GetString("DESCRIPCION");

                    t.Codigo = codigol;
                    t.Descripcion = descripcionl;
                    e.Tipo = t;






                }

                rd2.Close();
                conn2.Close();

                l.Add(e);

            }

            rd.Close();
            conn.Close();



            return l;
        }

        public DataTable gtCmbLocal(int codigoCC)
        {
            //codigoCC = codigo de Centro comerical
            DataTable dtLocal = null;
            MySqlConnection conn = new coneccion2().getInstance();
            MySqlDataAdapter daLocal = null;
            conn.Open();
            String sqlString = "select codigoLocal,codigo from local where codigoCC = " + codigoCC;

            //MySqlCommand cmd = new MySqlCommand(sqlString, conn);
            // MySqlDataReader rd = cmd.ExecuteReader();
            daLocal = new MySqlDataAdapter(sqlString, conn);
            dtLocal = new DataTable("local");
            daLocal.Fill(dtLocal);

            return dtLocal;
        }
    }
}
